package locations.model;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Practica implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
    @ManyToOne(cascade = CascadeType.ALL)
    private Pacient paciente;
    private String detalle;
    private String diagnostico;
    @Temporal(TemporalType.DATE)
    private Date fechaPractica;
    @Temporal(TemporalType.DATE)
    private Date fechaCarga;
    @ManyToMany(cascade = CascadeType.MERGE)
    private Collection<TipoPractica> tipoPracticas;
    @ManyToMany(cascade = CascadeType.MERGE)
    private Collection<TipoProblematica> tipoProblematicas;
    @ManyToOne
    private Profesional profesional;
    private String tipo;
    private Boolean valido;


    public Practica()
    {
            super();
            this.setFechaCarga(new Date());
            this.setTipoPracticas(new HashSet<TipoPractica>());
            this.setTipoProblematicas(new HashSet<TipoProblematica>());
    }

    public String getDetalle() {
            return detalle;
    }

    public void agregarTipoPractica(TipoPractica p)
    {
            this.getTipoPracticas().add(p);
    }
    public void agregarTipoProblematica(TipoProblematica p)
    {
            this.getTipoProblematicas().add(p);
    }

    public void setDetalle(String detalle) {
            this.detalle = detalle;
    }

    public Date getFechaPractica() {
            return fechaPractica;
    }

    public void setFechaPractica(Date fechaPractica) {
            this.fechaPractica = fechaPractica;
    }

    public Date getFechaCarga() {
            return fechaCarga;
    }

    public void setFechaCarga(Date fechaCarga) {
            this.fechaCarga = fechaCarga;
    }

    public Long getId() {
            return id;
    }

    public void setId(Long id) {
            this.id = id;
    }

    public Profesional getProfesional() {
            return profesional;
    }

    public void setProfesional(Profesional profesional) {
            this.profesional = profesional;
    }

    public static long getSerialversionuid() {
            return serialVersionUID;
    }

    public Pacient getPaciente() {
            return paciente;
    }

    public void setPaciente(Pacient paciente) {
            this.paciente = paciente;
    }

    public String getTipo() {
            return tipo;
    }

    public void setTipo(String tipo) {
            this.tipo = tipo;
    }

    public String getDiagnostico() {
            return diagnostico;
    }

    public void setDiagnostico(String diagnostico) {
            this.diagnostico = diagnostico;
    }

    public Collection<TipoPractica> getTipoPracticas() {
            return tipoPracticas;
    }

    public void setTipoPracticas(Collection<TipoPractica> tipoPracticas) {
            this.tipoPracticas = tipoPracticas;
    }

    public String getCodigosPracticas(){
            String str="";
            for(TipoPractica each : this.getTipoPracticas()){
                    str = str + each.getCodigo()+" ";
            }	
            return str;
    }

    public String getCodigosProblematicas()
    {
            String str="";
            for(TipoProblematica each : this.getTipoProblematicas()){
                    str = str + each.getNombre() + " ";
            }	
            return str;
    }

    public Boolean getValido() {
            return valido;
    }

    public void setValido(Boolean valido) {
            this.valido = valido;
    }

    public Collection<TipoProblematica> getTipoProblematicas()
    {
        return tipoProblematicas;
    }

    public void setTipoProblematicas(Collection<TipoProblematica> tipoProblematicas)
    {
        this.tipoProblematicas = tipoProblematicas;
    }
        
        
}
